//
//  HMStatusPictureView.swift
//  iOSWeibo11
//
//  Created by Apple on 16/7/24.
//  Copyright © 2016年 Apple. All rights reserved.
//

import UIKit

/// 一个图片的宽高 = (屏幕的宽 - 左右间距 - 图片间距) / 图片列数
let StatusPictureViewItemWH = ((UIScreen.width() - 2 * CellMargin - (CGFloat(maxOfColumn) - 1) * ItemMargin)) / CGFloat(maxOfColumn)

/// 最大列数
let maxOfColumn = 3

/// 图片之间的间距
let ItemMargin: CGFloat = 4

/// 微博配图视图
class HMStatusPictureView: UIView {
    /// 图片的url数组
    var imageURLs: [NSURL]? {
        didSet {
            // 配图获取到图片urls
            // 布局imageView的位置
            let size = layoutImages(imageURLs)
            
            // 自己来更新自己的宽高约束
            self.snp_updateConstraints { (make) -> Void in
                make.size.equalTo(size)
            }
        }
    }
    
    /// 布局9个imageView的位置
    private func layoutImages(imageURLs: [NSURL]?) -> CGSize {
        
        // 获取图片数量
        let count = imageURLs?.count ?? 0
        
        // 仅供测试
//        let count = Int(arc4random_uniform(9))
        
        debugLabel.text = "图片数量 = \(count)"
        
        // 总列数,默认3列
        var numberOfColumn = maxOfColumn
        
        if count == 1 {
            // 只有一个图片,显示1列
            numberOfColumn = 1
        } else if count == 2 || count == 4 {
            // 2个或4个图片显示2列
            numberOfColumn = 2
        }
        
        // 获取每个图片,设置位置
        for (index, imageView) in imageViews.enumerate() {
            
            if index >= count {
                // 不需要显示的隐藏
                imageView.hidden = true
            } else {
                // 要显示
                imageView.hidden = false
                
                // 设置每个imageView的frame
                // 计算imageView在哪列
                let column = index % numberOfColumn
                
                // 计算imageView在哪行
                let row = index / numberOfColumn
                
                // 计算x
                let x = CGFloat(column) * (StatusPictureViewItemWH + ItemMargin)
                
                let y = CGFloat(row) * (StatusPictureViewItemWH + ItemMargin)
                
                imageView.frame = CGRect(x: x, y: y, width: StatusPictureViewItemWH, height: StatusPictureViewItemWH)
                
                // 设置imageView的内容
                let url = imageURLs![index]
                // 使用SDWebImage显示图片
                imageView.sd_setImageWithURL(url)
            }
        }
        
        // 根据 图片数量 计算配图的总大小
        if count == 0 {
            return CGSizeZero
        }
        
        // 计算宽度 = 总列数 * 图片的宽度 + (总列数 - 1) * 图片间距
        let width = CGFloat(numberOfColumn) * StatusPictureViewItemWH + (CGFloat(numberOfColumn) - 1) * ItemMargin
        
        // 2 = (6 + 3 - 1) / 3
        // 3 = (9 + 3 - 1) / 3
        // 1 = (3 + 3 - 1) / 3
        // 总行数 = (总数 + 总列数 - 1) / 总列数, 前提保证都是整数
        let numberOfRow = (count + numberOfColumn - 1) / numberOfColumn
        
        // 计算高度 = 总行数 * 图片高度 + (总行数 - 1) * 图片的间距
        let height = CGFloat(numberOfRow) * StatusPictureViewItemWH + (CGFloat(numberOfRow) - 1) * ItemMargin
        
        return CGSize(width: width, height: height)
    }
    
    // 存放9张图片
    private var imageViews: [UIImageView] = [UIImageView]()
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        
//        backgroundColor = UIColor.brownColor()
        
        setupUI()
    }
    
    private func setupUI() {
        // 创建9个imageView
        for i in 0..<9 {    // 0 - 8
            let imageView = UIImageView()
            
            imageView.backgroundColor = UIColor.randomColor()
            
            // 设置填充模式
            imageView.contentMode = UIViewContentMode.ScaleAspectFill
            imageView.layer.masksToBounds = true
            
            // 添加到父控件
            self.addSubview(imageView)
            
            // 将imageView添加到数组
            imageViews.append(imageView)
            
            
            // 图片添加点击事件
            imageView.userInteractionEnabled = true
            
            imageView.tag = i
            
            let tap = UITapGestureRecognizer(target: self, action: "imageViewDidClick:")
            imageView.addGestureRecognizer(tap)
        }
        
        // 添加调试label
        self.addSubview(debugLabel)
        debugLabel.frame = CGRect(x: 0, y: 0, width: 300, height: 200)
    }
    
    func imageViewDidClick(tap: UITapGestureRecognizer) {
        // 被点击的View
        let imageView = tap.view!
        
        print("点击了 \(imageView.tag)")
        
        let browser = SDPhotoBrowser()
        browser.sourceImagesContainerView = self
        
        browser.imageCount = imageURLs?.count ?? 0
        
        browser.currentImageIndex = imageView.tag
        
        browser.delegate = self
        
        // 展示图片浏览器
        browser.show()
    }
    
    // MARK: - 懒加载
    /// 调试label
    private lazy var debugLabel: UILabel = {
        let label = UILabel(textColor: UIColor.blackColor(), fontSize: 20)
        
        label.text = "我是label"
        label.numberOfLines = 0
        
        label.hidden = true
        
        return label
    }()
}

extension HMStatusPictureView: SDPhotoBrowserDelegate {
    func photoBrowser(browser: SDPhotoBrowser!, placeholderImageForIndex index: Int) -> UIImage! {
        let imageView = imageViews[index]
        return imageView.image
    }
    
    func photoBrowser(browser: SDPhotoBrowser!, highQualityImageURLForIndex index: Int) -> NSURL! {
        // imageURLs,有多张图片,但是都是小图
        let urlString = imageURLs![index].absoluteString
        
        // 换成大图
        let largeUrlString = urlString.stringByReplacingOccurrencesOfString("thumbnail", withString: "large")
        
        return NSURL(string: largeUrlString)
    }
}
